package cn.data.stream.stream;

import cn.data.stream.expection.DataStreamInitException;
import java.util.List;

/**
 * stream 顶级父类
 *
 * @author shi hong yu
 */
public interface IComponent {

    /**
     * 设置stream实例名字 （全局唯一）
     * @param name
     */
    void setName(String name);

    /**
     *获取stream 实例名
     * @return
     */
    String getName();

    /**
     * stream 初始化
     */
    void init() throws DataStreamInitException;

    /**
     * 添加下游
     * @param out
     */
    void addOutputStream(List<IComponent> out);

    /**
     * 添加下游
     * @param out
     */
    void addOutputStream(IComponent out);

    /**
     * 获取下游组件
     * @return
     */
    List<IComponent> getOutputStream();

    /**
     * 处理数据
     * @param data
     */
   void  process(Object data);

    /**
     * stream 资源销毁
     */
    void destroy();
}
